<?php

class PaiementController extends Controller
{
	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
		array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array(),
				'users'=>array('*'),
		),
		array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('index','carteBleue','cheque','paypal','virement','paiementOk','paiementKo'),
				'users'=>array('@'),
		),
		array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array(),
				'users'=>array('admin'),
		),
		array('deny',  // deny all users
				'users'=>array('*'),
		),
		);
	}

	public function actionIndex()
	{
		if(count(Panier::getContenuPanier()) !=0) {
			Yii::app()->user->setState("libellePaiement",null);
			Yii::app()->user->setState('idCommande',null);
			Yii::app()->user->setState("montantGlobalHorsFdp",Panier::montantGlobalHorsFdp());
			Yii::app()->user->setState("montantFdpGlobal",Panier::montantFdpGlobal());
			$paiement = new Paiement();
			if(isset($_POST['Paiement'])) {
				$paiement->attributes=$_POST['Paiement'];
				if($paiement->validate()) {
					if($_POST['Paiement']['paiement']=="Carte bleue") {
						$this->redirect($this->createUrl("paiement/carteBleue"));
					}
					else if($_POST['Paiement']['paiement']=="Cheque") {
						$this->redirect($this->createUrl("paiement/cheque"));
					}
					else if($_POST['Paiement']['paiement']=="Paypal") {
						$this->redirect($this->createUrl("paiement/paypal"));
					}
					else if($_POST['Paiement']['paiement']=="Virement") {
						$this->redirect($this->createUrl("paiement/virement"));
					}
				}
			}
			$this->render('index', array('model'=>$paiement));
		}
		else {
			$this->redirect(array('/panier'));
		}
	}

	public function actionCarteBleue() {
		if(count(Panier::getContenuPanier()) !=0) {
			Yii::app()->user->setState("libellePaiement","Carte bleue");
			$this->render('carteBleue');
		}
		else {
			$this->redirect(array('/panier'));
		}
	}

	public function actionCheque() {
		if(count(Panier::getContenuPanier()) !=0) {
			Yii::app()->user->setState("libellePaiement","Cheque");
			$this->enregistrerCommande();
			$this->render('cheque',array(
			'montantGlobalHorsFdp'=>Yii::app()->user->getState("montantGlobalHorsFdp"),
			'montantFdpGlobal'=>Yii::app()->user->getState("montantFdpGlobal"),
			"idCommande"=>Yii::app()->user->getState('idCommande')
			));
		}
		else {
			$this->redirect(array('/panier'));
		}
	}

	public function actionPaypal() {
		if(count(Panier::getContenuPanier()) !=0) {
			Yii::app()->user->setState("libellePaiement","Paypal");
			Panier::supprimerTimeOutPanier();
			$this->render('paypal', array(
			'montantGlobalHorsFdp'=>Panier::montantGlobalHorsFdp(),
			'montantFdpGlobal'=>Panier::montantFdpGlobal(),
			));
		}
		else {
			$this->redirect(array('/panier'));
		}
	}

	public function actionVirement() {
		if(count(Panier::getContenuPanier()) !=0) {
			Yii::app()->user->setState("libellePaiement","Virement");
			$this->enregistrerCommande();
			$this->render('virement',array(
				'montantGlobalHorsFdp'=>Yii::app()->user->getState("montantGlobalHorsFdp"),
				'montantFdpGlobal'=>Yii::app()->user->getState("montantFdpGlobal"),
				"idCommande"=>Yii::app()->user->getState('idCommande')));
		}
		else {
			$this->redirect(array('/panier'));
		}
	}

	public function actionPaiementOk() {
		if(count(Panier::getContenuPanier()) !=0) {
			$this->enregistrerCommande();
			$this->render('paiementOk', array("idCommande"=>Yii::app()->user->getState('idCommande')));
		}
		else {
			$this->redirect(array('/panier'));
		}
	}
	
	public function actionPaiementKo() {
		$this->render('paiementKo');
	}

	public function enregistrerCommande() {
		// pour savoir si la commande est déjà enregistré
		$erreur = 'false';
		$idCommandetmp = Yii::app()->user->getState('idCommande');
		if(!isset($idCommandetmp)) {
			$modelCommande = new Commande();
			$modelCommande->id_client = Client::getClientFromUser()->id;
			$modelCommande->id_livraison = Yii::app()->user->getState("idLivraison");
			$modelCommande->montantHorsFdp = Panier::montantGlobalHorsFdp();
			$modelCommande->montantFdp = Panier::montantFdpGlobal();
			$modelCommande->paiement = Yii::app()->user->getState("libellePaiement");

			if($modelCommande->save()) {
				Yii::app()->user->setState('idCommande',$modelCommande->id);
				$panier = Yii::app()->user->getState('panier');
				foreach ($panier as $produit) {
					$modelLigneCommande = new LigneCommande();
					$modelLigneCommande->fdp = $produit['fdpProduit'];
					$modelLigneCommande->id_commande = $modelCommande->id;
					$modelLigneCommande->id_produit = $produit['idProduit'];
					$modelLigneCommande->prixUnitaire = $produit['prixProduit'];
					$modelLigneCommande->quantite = $produit['qteProduit'];
					$montantGlobal= ($produit['prixProduit']+$produit['fdpProduit'])*$produit['qteProduit'];
					if($montantGlobal <= 50) {
						$modelLigneCommande->commission = round($montantGlobal * (Yii::app()->params['commission']['[0-50]']/100),2);
					}
					else if($montantGlobal > 50	&& $montantGlobal <= 500) {
						$modelLigneCommande->commission = round($montantGlobal * (Yii::app()->params['commission'][']50-500]']/100),2);
					}
					else if($montantGlobal > 500) {
						$modelLigneCommande->commission = round($montantGlobal * (Yii::app()->params['commission'][']500-*]']/100),2);
					}
					if(!$modelLigneCommande->save()) {
						$erreur = 'true';
						LigneCommande::model()->deleteAllByAttributes(array("id_commande"=>$modelCommande->id));
						Commande::model()->deleteByPk($modelCommande->id);
						Yii::app()->user->setState('idCommande',null);
						$this->render('paiementKo', array("model"=>$modelLigneCommande));
					}
				}
			}
			else {
				$erreur = 'true';
				Commande::model()->deleteByPk($modelCommande->id);
				Yii::app()->user->setState('idCommande',null);
				$this->render('paiementKo', array("model"=>$modelCommande));
			}
			
			if($erreur != 'true') {
				Panier::razContenuPanier();
			}
		}
	}
}